using Digitalmes.Domain.Entities.Mes.Masters;

namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工艺路线。
/// </summary>
/// <remarks>
/// 说明：
/// <para>1、工序的后置工序只能有一个，若有多个，表示是并行执行；</para>
/// <para>2、路线的终结点有且只有一个；</para>
/// <para>3、每条工艺路线中工序以及流向是固定的，不与产品关联。</para>
/// </remarks>
[SugarTable("proc_routing")]
public sealed class ProcRouting : AuditedEntity, ISoftDelete
{
    /// <summary>
    /// 工艺路线编号
    /// </summary>
    [NotNull]
    public string? RoutingCode { get; set; }

    /// <summary>
    /// 工艺路线名称。
    /// </summary>
    [NotNull]
    public string? RoutingName { get; set; }

    /// <summary>
    /// 所属产线 Id
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产线
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(LineId))]
    public MdLine? Line { get; set; }

    /// <summary>
    /// 产品 Id
    /// </summary>
    public long ProductId { get; set; }

    /// <summary>
    /// 产品
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(ProductId))]
    public MdMaterial? Product { get; set; }

    /// <summary>
    /// 是否为主工艺路线。
    /// </summary>
    /// <remarks>
    /// 主工艺路线代表是主产品，下线时表示产品完完工；
    /// 非主工艺路线表示是某些关键物料生产或检验路线，最终会与主路线进行合并。
    /// </remarks>
    public bool IsMaster { get; set; }

    /// <summary>
    /// 排序
    /// </summary>
    public int Order { get; set; }

    /// <summary>
    /// 备注
    /// </summary>
    public string? Remark { get; set; }

    /// <summary>
    /// 启用状态（0->停用，1->启用）
    /// </summary>
    public EnabledStatusEnum Status { get; set; }

    public bool IsDeleted { get; set; }

    /// <summary>
    /// 工艺步骤集合
    /// </summary>
    [NotNull]
    [Navigate(NavigateType.OneToMany, nameof(ProcRoutingStep.RoutingId))]
    public List<ProcRoutingStep>? Steps { get; set; }
}
